package jsu.ljy.lostandfind.model;

import java.util.Date;

/**
 * 评论实体类
 * 
 * <p>表示系统中的评论信息，包含评论的内容、发布者和关联物品信息。
 * 用于物品评论的发表、修改和展示。</p>
 * 
 * @author 罗嘉毅
 * @version 1.0
 * @since 2024-03-21
 */
public class Comment {
    /** 评论ID */
    private Long id;
    
    /** 评论内容 */
    private String content;
    
    /** 关联物品ID */
    private Long itemId;
    
    /** 评论用户ID */
    private Long userId;
    
    /** 发表时间 */
    private Date createTime;
    
    /** 评论用户信息（非数据库字段） */
    private User user;
    
    /** 评论物品信息（非数据库字段） */
    private Item item;

    /**
     * 默认构造函数
     */
    public Comment() {}

    /**
     * 获取评论ID
     * @return 评论ID
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置评论ID
     * @param id 评论ID
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取评论内容
     * @return 评论内容
     */
    public String getContent() {
        return content;
    }

    /**
     * 设置评论内容
     * @param content 评论内容
     * @throws IllegalArgumentException 当内容为空或超过长度限制时抛出
     */
    public void setContent(String content) {
        if (content == null || content.trim().isEmpty()) {
            throw new IllegalArgumentException("评论内容不能为空");
        }
        if (content.length() > 500) {
            throw new IllegalArgumentException("评论内容不能超过500个字符");
        }
        this.content = content;
    }

    /**
     * 获取关联物品ID
     * @return 关联物品ID
     */
    public Long getItemId() {
        return itemId;
    }

    /**
     * 设置关联物品ID
     * @param itemId 关联物品ID
     */
    public void setItemId(Long itemId) {
        this.itemId = itemId;
    }

    /**
     * 获取评论用户ID
     * @return 评论用户ID
     */
    public Long getUserId() {
        return userId;
    }

    /**
     * 设置评论用户ID
     * @param userId 评论用户ID
     */
    public void setUserId(Long userId) {
        this.userId = userId;
    }

    /**
     * 获取发表时间
     * @return 发表时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置发表时间
     * @param createTime 发表时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取评论用户信息
     * @return 评论用户信息
     */
    public User getUser() {
        return user;
    }

    /**
     * 设置评论用户信息
     * @param user 评论用户信息
     */
    public void setUser(User user) {
        this.user = user;
    }

    /**
     * 获取评论物品信息
     * @return 评论物品信息
     */
    public Item getItem() {
        return item;
    }

    /**
     * 设置评论物品信息
     * @param item 评论物品信息
     */
    public void setItem(Item item) {
        this.item = item;
    }
} 